package conson.tech.manage.coupons.entity.dto;


import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * ClassName: CouponsDto
 * Description: 新增优惠券入参
 * Author: ZYF
 * Date: 2020/7/20
 * Version: 1.0
 */
@Data
public class CouponsDto implements Serializable{

    /**优惠券主体（0平台、1商家）*/
    @ApiModelProperty(value = "优惠券主体（0平台、1商家）")
    @NotNull(message = "优惠券主体不能为空")
    private Integer provider;

    /**费用归属*/
    @ApiModelProperty(value = "费用归属")
    private List<CouponsCostDto> couponsCostDtos;

    /**使用商户限制*/
    @ApiModelProperty(value = "使用商户限制")
    private List<CouponsUsingRangeDto> couponsUsingRangeDtos;

    /**发券方式 0定向发放 1非定向发放*/
    @ApiModelProperty(value ="发券方式 0定向发放 1非定向发放" )
    @NotNull(message = "发券方式不能为空")
    private Integer providedType;

    /**优惠券批次名称*/
    @ApiModelProperty(value = "优惠券批次名称")
    @NotBlank(message = "优惠券批次名称不能为空")
    private String batchName;

    /**优惠券使用类型 0 现金券 1满减券*/
    @ApiModelProperty(value = "优惠券使用类型 0 现金券 1满减券")
    @NotNull(message = "优惠券使用类型不能为空")
    private Integer batchType;

    /**优惠券金额*/
    @ApiModelProperty(value = "优惠券金额")
    @NotNull(message = "优惠券金额不能为空")
    private BigDecimal batchMoney;

    /**优惠券限额*/
    @ApiModelProperty(value = "优惠券限额")
    private BigDecimal limitMoney;

    /**使用场景限制 是否支持线上使用（0 否 1是）*/
    @ApiModelProperty(value = "使用场景限制 是否支持线上使用（0 否 1是）")
    private Integer onlineFlag;

    /**使用场景限制 是否支持线下使用（0 否 1是）*/
    @ApiModelProperty(value = "使用场景限制 是否支持线下使用（0 否 1是）")
    private Integer offlineFlag;

    /**前端展示标题*/
    @ApiModelProperty(value = "前端展示标题")
    @NotBlank(message = "前端展示标题不能为空")
    private String showTitle;

    /**使用限制说明*/
    @ApiModelProperty(value = "使用限制说明")
    private  String usedDes;

    /**有效期限制类型(0 绝对日期 1相对日期)*/
    @ApiModelProperty(value = "有效期限制类型(0 绝对日期 1相对日期)")
    @NotNull(message = "有效期限制类型不能为空")
    private Integer timeLimit;

    /**有效期开始时间*/
    @ApiModelProperty(value = "有效期开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;

    /**有效期结束时间*/
    @ApiModelProperty(value = "有效期结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;

    /**相对有效期*/
    @ApiModelProperty(value = "相对有效期")
    private Integer relativeTime;

    /**申请数量*/
    @ApiModelProperty(value = "申请数量")
    @NotNull(message = "申请数量不能为空")
    @Min(value = 1)
    private Integer applicateNum;

    /**每人最大可领取数量*/
    @ApiModelProperty(value = "每人最大可领取数量")
    private Integer limitNum;

    /**预警数量*/
    @ApiModelProperty(value = "预警数量")
    private Integer warningNum;

    /**是否到期预警 （0 否 1是）*/
    @ApiModelProperty(value = "是否到期预警 （0 否 1是）")
    private Integer expirationNotice;

    /**到期预警发短信flag(0 不发短信 1发短信)*/
    @ApiModelProperty(value = "到期预警发短信flag(0 不发短信 1发短信)")
    private Integer smsFlag;

    /**到期提醒是否发送appPush（0 不发生 1发送）*/
    @ApiModelProperty(value = "到期提醒是否发送appPush（0 不发生 1发送）")
    private Integer pushFlag;

    /**推送内容*/
    @ApiModelProperty(value = "推送内容")
    private String smsDes;

    /**申请人*/
    @ApiModelProperty(value = "申请人")
    @NotNull(message = "申请人不能为空")
    private String applyName;

    /**使用范围类型 0-全平台，1-场景 2-商品 3-商品品类 4-商品spuId*/
    @ApiModelProperty(value = "使用范围类型 0-全平台，1-场景 2-商品 3-商品品类 4-商品spuId")
    @NotNull(message = "使用商户限制不能为空")
    private Integer rangeType;

}
